/**
 * 公共业务逻辑处理函数集合
 * */
var basicTools = {
    /**
     * 根据服务器响应的内容（不同的状态码）处理做不同的逻辑处理
     * @param  responseData 服务器响应的内容
     * @param callback 回调函数的方法，参数为响应的参数
     * */
    responseStatusLogicAction: function (responseData,callback) {
        // 检查用户输入是否是对象，如果不是对象，则转为对象
        var responseData = responseData || {};
        if (responseData.status == 400) {
            console.warn("用户发出的请求有错误，服务器没有进行新建或修改数据的操作，该操作是幂等的。");
        } else if (responseData.status == 401) {
            console.warn("表示用户没有权限（令牌、用户名、密码错误）");
            // window.location = window.origin http://localhost:8080/#/login
            if (window.parent == window) {
                window.location = window.origin + window.location.pathname + "#/login";
            } else {
                window.parent.location = window.origin + window.location.pathname + "#/login";
            }
        } else if (responseData.status == 403) {
            console.warn("表示用户得到授权（与401错误相对），但是访问是被禁止的。");
        } else if (responseData.status == 404) {
            console.warn("用户发出的请求针对的是不存在的记录，服务器没有进行操作，该操作是幂等的。");
        } else if (responseData.status == 406) {
            console.warn("用户请求的格式不可得（比如用户请求JSON格式，但是只有XML格式）。");
        } else if (responseData.status == 410) {
            console.warn("用户请求的资源被永久删除，且不会再得到的。");
        } else if (responseData.status == 422) {
            console.warn("[POST/PUT/PATCH] 当创建一个对象时，发生一个验证错误。");
        } else if (responseData.status == 500) {
            console.warn("服务器发生错误，用户将无法判断发出的请求是否成功。");
        }
        // 检查参数是否为方法，则执行方法
        if(typeof func == 'function'){
            callback(responseData)
        }
    },

    /**
     * 将当前对象克隆一份，即一个新的内存空间
     */
    cloneObject: function (targetObject) {
        return JSON.parse( JSON.stringify(targetObject) );
    },

    /**
     * 判断类型
     * @param obj 判断的变量
     * @param type 预期的类型
     */
    isType: function (obj, type) {
        return Object.prototype.toString.call(obj) === "[object " + type + "]";
    },

    /**
     * 深度遍历
     * 复合的Json结构数据，JSON对象里面可以嵌套多层对象(数组或对象)
     */
    JSONTrim: function (json) {
        // 1. 变量为json对象：将key输出，value进行递归
        if (this.isType(json, "Object")) {
            for (var key in json) {
                if (this.isType(json[key], "Array") || this.isType(json[key], "Object")) {
                    this.JSONTrim(json[key]);
                }else{
                    if (this.isType(json[key], "String") ) {
                        json[key] = json[key].trim();
                    }
                }
            }
        }
        // 2. 变量为json数组：逐个元素递归
        else if (this.isType(json, "Array")) {
            for (var i = 0; i < json.length; i++) {
                var jsonObj = json[i];
                if (this.isType(jsonObj, "Array") || this.isType(jsonObj, "Object")) {
                    this.JSONTrim(jsonObj);
                }else{
                    if (this.isType(jsonObj, "String") ) {
                        json[i] = jsonObj.trim();
                    }
                }
            }
        }
        // // 3. 变量为简单数据类型：直接输出（递归函数的终止条件）
        // else if (this.isType(json, "String") || this.isType(json, "Number") ||
        //     this.isType(json, "Boolean") || this.isType(json, "Null")) {
        // }
    }
};

export default basicTools;
